import os
import shutil
import argparse

def move_all_images(src_base_folder, dest_base_folder):
    """
    扫描 src_base_folder 及其子目录，找到所有指定的图片文件（包括'.jpg', '.jpeg', '.png', '.gif', '.bmp', '.tiff', '.webp'），
    在 dest_base_folder 下创建与原图片文件所在目录同名的文件夹，
    并将图片文件移动到该文件夹中。
    """
    # 定义图片文件扩展名集合
    image_extensions = {'.jpg', '.jpeg', '.png','.aae','.heic','.thm', '.gif', '.bmp', '.tiff', '.webp'}
    
    # 遍历源目录及其子目录
    for root, dirs, files in os.walk(src_base_folder):
        for file in files:
            if any(file.lower().endswith(ext) for ext in image_extensions):
                # 获取图片文件的完整路径
                full_file_path = os.path.join(root, file)
                
                # 计算相对路径（去掉src_base_folder部分）
                rel_path = os.path.relpath(root, src_base_folder)
                
                # 创建目标文件夹路径（在dest_base_folder下创建与原目录结构相同的目录）
                dest_dir = os.path.join(dest_base_folder, rel_path)
                
                # 如果目标目录不存在，则创建它
                os.makedirs(dest_dir, exist_ok=True)
                
                # 目标文件的新路径
                dest_file_path = os.path.join(dest_dir, file)
                
                try:
                    # 移动文件
                    shutil.move(full_file_path, dest_file_path)
                    print(f"已将文件 {full_file_path} 移动到 {dest_file_path}")
                except Exception as e:
                    print(f"移动文件时出错: {e}")

# 源目录和目标目录
# src_base_folder = r"D:\video\"
# dest_base_folder = r"D:\photo"

if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='Photo pick tool')
    parser.add_argument('--src', type=str, default='D:\\video\\', help='pick photo from src folder')
    parser.add_argument('--des', type=str, default='D:\\photo\\', help='take photo to des folder')

    args = parser.parse_args()

    src_base_folder = args.src
    dest_base_folder = args.des
    # 调用函数执行操作
    move_all_images(src_base_folder, dest_base_folder)